library(ggplot2)
library(dplyr)
library(gapminder)11 Pakiety ggplot2 i gapminder. Podstawy animacji
Grzegorz Kończak
11.1 📘 Załadowanie pakietów i podstawowe informacje o zbiorze gapminder
11.1.1 ❕ Załadowanie wymaganych pakietów
11.1.2 ️✔️️Dla konstrukcji wykresów w tej części wykorzystan* zbiór gapminderz pakietu gapminder
11.1.3 Informacja o zbiorze gapminder
summary(gapminder) country continent year lifeExp
Afghanistan: 12 Africa :624 Min. :1952 Min. :23.60
Albania : 12 Americas:300 1st Qu.:1966 1st Qu.:48.20
Algeria : 12 Asia :396 Median :1980 Median :60.71
Angola : 12 Europe :360 Mean :1980 Mean :59.47
Argentina : 12 Oceania : 24 3rd Qu.:1993 3rd Qu.:70.85
Australia : 12 Max. :2007 Max. :82.60
(Other) :1632
pop gdpPercap
Min. :6.001e+04 Min. : 241.2
1st Qu.:2.794e+06 1st Qu.: 1202.1
Median :7.024e+06 Median : 3531.8
Mean :2.960e+07 Mean : 7215.3
3rd Qu.:1.959e+07 3rd Qu.: 9325.5
Max. :1.319e+09 Max. :113523.1
11.1.4 Informacja o zbiorze w tabeli
table(gapminder$continent, gapminder$year)
1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 2002 2007
Africa 52 52 52 52 52 52 52 52 52 52 52 52
Americas 25 25 25 25 25 25 25 25 25 25 25 25
Asia 33 33 33 33 33 33 33 33 33 33 33 33
Europe 30 30 30 30 30 30 30 30 30 30 30 30
Oceania 2 2 2 2 2 2 2 2 2 2 2 2
11.2 📘 Wybrane wykresy dla danych ze zbioru ‘gapminder’
11.2.1 ️️✔️ Wykresy przedstawiają jednocześnie dane z wielu różnych lat
11.2.2 ️️✔️ Do konstrukcji wykresów w tej części wykorzystano dostępny w R zbiór gapminder
11.2.3 Wykres słupkowy - podstawowa konstrukcja
ggplot(gapminder, aes(x=continent)) + geom_bar()
11.2.4 Wykres słupkowy - dodanie kolorów
ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()
11.2.5 Wykres słupkowy - dodanie etykiety legendy
ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+labs(fill='Kontynent')
11.2.6 Wykres słupkowy - usunięcie legendy
ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+guides(fill='none')
11.2.7 Wykres zapamiętany w obiekcie rys
rys=ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+guides(fill='none')11.2.8 Wykres słupkowy - transformacja skali
rys + coord_trans(y="sqrt")
11.2.9 Wykres słupkowy - współrzędne biegunowe
rys + coord_polar()
11.2.10 Wykres słupkowy - poziomy
rys+coord_flip()
11.2.11 Wybrane państwa - wykres liniowy
kraje <- c("Poland", "Germany", "Czech Republic", "Austria","Romania")
ggplot(subset(gapminder, country %in% kraje),
aes(x = year, y = lifeExp, color = country)) + geom_line() + geom_point()+
theme(legend.position='bottom') ####
11.2.12 Wykres gęstości
ggplot(gapminder, aes(lifeExp)) +
geom_density()
11.2.13 Wykres gęstości z dodatkowymi parametrami
ggplot(gapminder, aes(lifeExp)) +
geom_density(linewidth=1.5, fill="blue", alpha=0.6)
11.2.14 Histogram
ggplot(gapminder, aes(lifeExp)) +
geom_histogram( binwidth=4, color="black", fill="lightblue", alpha=0.5)
11.2.15 Histogram i gęstość
ggplot(gapminder, aes(lifeExp)) +
geom_histogram(aes(y=after_stat(density)), binwidth=4, color="black", fill="lightblue", alpha=0.5)+
geom_density()
11.2.16 Histogram i gęstość - dodatkowe parametry
ggplot(data=gapminder, aes(x=lifeExp)) +
geom_histogram(aes(y=after_stat(density)), binwidth=4, color="black", fill="lightblue", alpha=0.5)+
geom_density(linewidth=1.5, fill="pink", alpha=0.2) 
11.2.17 Gęstości dla poszczególnych kontynentów
ggplot(data=gapminder, aes(x=lifeExp, fill=continent)) +
geom_density(alpha=0.3)
11.2.18 Utworzenie obiektu rys1
rys1 <- ggplot(gapminder, aes(continent, lifeExp, fill=continent))11.2.19 Wyświetlenie obiektu rys1 z reprezentacją graficzną boxplot
rys1 +
geom_boxplot(outlier.size=2)
11.2.20 Wyświetlenie obiektu rys1 z reprezentacją graficzną violin
rys1 +
geom_violin()
11.2.21 Konstrukcja i wyświetlenie obiektu rys2
rys2 <- ggplot(data=gapminder,
aes(x=gdpPercap, y=lifeExp))
rys2
11.2.22 Wyświetlenie obiektu rys2 z reprezentacją graficzną point
11.2.23 UWAGA: na wykresie zamieszczono jednocześnie dane z różnych lat
rys2 + geom_point()
11.2.24 Wyświetlenie obiektu rys2 z reprezentacją graficzną point i kolorami dla kontynentów
rys2 + geom_point(aes(color=continent))
11.2.25 Wyświetlenie obiektu rys2 z reprezentacją graficzną violin, kolorami dla kontynentów w oddzielnych oknach
rys2+
geom_point(aes(color=continent)) +
facet_grid(year~continent)
11.3 📘 Animacje w ggplot2 - pakiet gganimation
11.3.1 ❕ Załadowanie bibliotek dla animacji
library(gganimate)
library(gifski)11.3.2 Utworzenie obiektu p
p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
geom_point(alpha = 0.7) +
theme(legend.position = 'none') +
labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
transition_time(year)11.3.3 Wyświetlenie obiektu p
p
11.3.4 Utworzenie obiektu p
p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
geom_point(alpha = 0.7) +
theme(legend.position = 'none') +
facet_wrap(~continent) +
labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
transition_time(year)11.3.5 Wyświetlenie obiektu p
p
11.3.6 Uruchomienie animacji
animate(p, 100, 10)
11.3.7 Uruchomienie animacji z parametrami
animate(p, nframes=100, fps=10,height = 20, width = 30, units = "cm",res=150)
11.3.8 Animacja - określenie różnych parametrów
p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
geom_point(alpha = 0.7) +
theme(legend.position = 'none') +
facet_wrap(~continent) +
labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
transition_time(year)+
scale_colour_manual(values = country_colors) +
scale_size(range = c(2, 12)) +
scale_x_log10() +
facet_wrap(~continent) +
theme(legend.position = 'none') +
labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
transition_time(year) +
ease_aes('linear')
p
11.4 📘 Zapisanie animacji w pliku gif i wyświetlenie w zewnętrznym oknie
makeplot <- function(){
datalist <- split(gapminder, gapminder$year)
lapply(datalist, function(data){
p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) +
scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
print(p)
})
}
gif_file <- file.path(tempdir(), 'gapminder.gif')
save_gif(makeplot(), gif_file, 1280, 720, res = 144)
utils::browseURL(gif_file)